import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({
  /**
   * state: 定义状态--- vuex中的数据源。
   * 我们保存的数据就保存在这里，可以在页面通过 this.$store.state.?来获取我们定义的数据
    */
  state: {
    author: 'Wise Ray',
    ylist: [{a: '1xsa', b: 'ass'}, {a: 'qwx2', b: 'mouth'}],
    current_a: 'qwx2'
  },
  /**
   * mutations
   * 提交状态修改。
   * 也就是set、get中的set，这是vuex中唯一修改state的方式，但不支持异步操作。
   * 第一个参数默认是state。外部调用方式：store.commit('setAuthor', 'ray')。和vue中的methods类似。
   */
  mutations: {
    setAuthor (state, msg) {
      state.author = msg
    },
    pushYlist (state, item) {
      state.ylist.push({id: item.a, keyname: item.b})
    }
  },
  /**
   * getters
   * 相当于vue中的computed计算属性
   */
  getters: {
    // 写法1
    getAuthor: (state) => () => {
      return state.author
    },
    getYlist: state => () => {
      return state.ylist
    },
    // 写法2
    getcurrent_a: state => () => state.current_a,
    // 调用其他getter--->可以接受其他的getters作为参数
    getb_by_current_a: (state, getters) => () => {
      for (let k in state.ylist) {
        if (state.ylist[k].a === getters.getcurrent_a()) {
          return state.ylist[k].b
        }
      }
    },
    getb_by_a: (state) => (a) => {
      for (let k in state.ylist) {
        if (state.ylist[k].a === a) {
          return state.ylist[k].b
        }
      }
    }
  }
})

export default store
